#ifndef VENTANAPRINCIPAL_H
#define VENTANAPRINCIPAL_H

#define CTE_TERRITORIO_OCUPADO "AVISO: El territorio seleccionado ya le pertenece a otro jugador."
#define CTE_TERRITORIO_AJENO "AVISO: El territorio seleccionado no te pertenece."

#include "tablero.h"
#include "chatentrada.h"
#include "Mapa.h"
#include "JuegoClientImp.h"
#include "Jugador.h"
#include "Cliente.h"
#include <gtkmm.h>
#include <gtkglmm.h>

using namespace ui::tablero;
using namespace Gtk;
using namespace Gtk::GL;

namespace ui {

typedef enum tipo_estado_juego {
	ESTADO_SELECCION_PAISES,
	ESTADO_NO_TURNO,
	ESTADO_REFUERZO,
	ESTADO_ATAQUE,
	ESTADO_FORTIFICACION
} tipo_estado_juego;

class VentanaPrincipal: public Window {

public:

    VentanaPrincipal(const Glib::RefPtr<const Gdk::GL::Config>& p_Config, Mapa& mapaDelJuego, Jugador &jug);
    ~VentanaPrincipal();

	Glib::RefPtr<Gtk::UIManager> m_refUIManager;
	Glib::RefPtr<Gtk::ActionGroup> m_refActionGroup;
	Glib::RefPtr<Gtk::RadioAction> m_refChoiceOne, m_refChoiceTwo;
	
	Mapa& mapa;
	JuegoClientImp jCliente;
	Cliente cliente;
	Jugador &jugador;
	
	tipo_estado_juego estadoJuego;
	bool territorioSeleccionado;
	Territorio* territorioDesde;

	Table m_tabPrincipal;
	Tablero m_drwTablero;
	
	//OTRO
	Frame m_frmOtro;
	VBox otroVBox;
	/*Estadisticas*/
	Frame m_frmEstadisticas;
	TextView estadisticasSalida;
	/*Mision*/
	HButtonBox misionBox;
	Button misionBoton;
	Frame m_frmMision;
	/*Boton Mapa Esferico*/
	HButtonBox mapaBox;
	Button mapaBoton;
	Frame m_frmBotonMapa;
	
	/*Boton Estado*/
	HButtonBox estadoBox;
	Button estadoBoton;
	Frame m_frmEstado;
	
	
	//CHAT
	string chatMsg;
	Frame m_frmChat;
	HSeparator chatS1, chatS2;
	ScrolledWindow chatBarra;
	VBox vBoxChat;
	HBox hBoxChat;
	TextView chatSalida;
	ChatEntrada chatEntrada;
	Button chatBotonEnviar;
	
	//INFO
	Frame m_frmInfo;
	string infoMsg;
	TextView infoSalida;
	ScrolledWindow infoBarra;
	

	void on_menu_JuegoSalir();
	void on_menu_PartidoNuevo();
	void on_menu_PartidoConectar();
	void on_menu_PartidoAbandonar();
	void on_menu_PartidoUbicar();
	void on_menu_PartidoAtacar();
	void on_menu_PartidoReubicar();
	void on_menu_MapaEsferico();
	void on_menu_MapaPlano();

	virtual bool on_key_press_event(GdkEventKey *event);
	
	bool on_imagen_clicked(GdkEventButton *event);
	void on_enviar_clicked();
	void on_mapa_boton_clicked();
	
	void on_estado_boton_clicked();
	void estadoAtaque(Territorio &t);
	void estadoFortificacion(Territorio &t);
	
	void escribirInfo(string msg);
	bool msgDados(int cantDadosPosibles, int &cantDados, string tDesde, string tHasta);
	bool msgFortificacion(int cantEjercitosPosibles, int &cantEjercitos, string tDesde, string tHasta);
	bool msgConectar(string &ip, string &nombre);
	
	void CargaMapaHardCode();
};

}

#endif
